package com.example.jiangqiangwei.mypermission1608demo;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

/**
 * 运行时权限 6.0 安全检查的一种机制
 * 6.0之后将权限分为2类:
 * 一类是普通权限不涉及用户隐私,网络,wifi状态,蓝牙。。。
 * <p>
 * 另外一类涉及用户隐私,访问sms,联系人,读写sdcard... 这类用户隐私权限是分组的
 * (a.只要这组的权限一个同意了,那么该组的所有权限默认同意。b.只要用户一旦同意授权了那么这个应用默认就有这个权限了,除非你卸载,人为关闭)
 * <p>
 * 使用步骤:
 * 1.先将需要申请的权限在清单文件里面进行配置
 * 2.在调用逻辑代码(你要访问用户的一些隐私)之前,需要先check判断是否授权
 * 3.如果已经授权-----》调用逻辑代码  如果没有授权-----》申请授权的代码
 * 4.在异步的onRequestPermissionsResult方法里面返回用户是否授权的结果,可以根据结果
 * 授权----》调用逻辑代码  用户拒绝-----》给用户提示
 */
public class MainActivity extends AppCompatActivity {

    private static final int CALL_PHONE_CODE = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }


    public void onclick(View view) {

        //2.检查权限
        //checkSelfPermission  1.环境变量2。具体需要检查的权限
        int checkresult = ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);
        //PackageManager.PERMISSION_GRANTED同意 PackageManager.PERMISSION_DENIED拒绝
        if (checkresult == PackageManager.PERMISSION_GRANTED) {
            //该权限被同意了
            call();
        } else {
            //没有获得该授权
            //3.申请授权
            //1.环境变量2.权限数组3.请求的状态码
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE_CODE);

        }
    }

    //4.返回申请权限的结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //onRequestPermissionsResult返回结果的方法 1.requestCode 请求码
        // 2. String[] permissions 申请权限数组 3.int[] grantResults 授权的结果
        if (requestCode == CALL_PHONE_CODE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            call();
        } else {
            //给用户提示
            Toast.makeText(this, "需要授权", Toast.LENGTH_SHORT).show();
        }
    }

    //执行打电话 涉及权限 Call_Phone
    private void call() {
        //Intent.ACTION_CALL 打电话的意图
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        //设置打电话的参数
        callIntent.setData(Uri.parse("tel:10086"));
        startActivity(callIntent);
    }
}
